package com.example.order.feign;

import com.example.homework.Show;
import com.example.order.feign.fallback.ProductRequestFallback;
import com.example.product.bean.Product;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * fallback属性: 当请求失败时，会调用fallback指定的实现类中的同名方法，返回一些假数据或默认值
 */

@FeignClient(value="service-product" , fallback = ProductRequestFallback.class)  //表明这个类是一个用来发送请求的“客户端”，并且指定了目标服务的名称为"service-product"
public interface ProductFeignClient {
    //在FeignClient中这就是用于发送请求的注解，而在controller中就是接收请求的注解
    //这里方法的返回值类型表示，请求后想要把对方发挥的信息转化为什么类型，响应肯定是json,如果这里方法的返回值是String，则接收的信息就是json字符串，如果是POJO类型，则接收的信息会被自动转化为POJO类型
    @GetMapping("/product/{id}")
    Product getProductById(@PathVariable("id") Long productId);

    /**
     * 作业，远程待用其他微服务的show接口
     * @param
     * @return
     */
    @GetMapping("/show/{id}")
    Show showProduct(@PathVariable("id") Long id);
}
